package com.osdp.common.util;

import java.util.ArrayList;
//import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.mvel2.MVEL;

import com.google.common.collect.Maps;

public class MvelCalculate {
	
	public static void main(String[] args) {
		Map<String,Object> paramMap = Maps.newHashMap();
		paramMap.put("保证金客户",1);//是/否
		paramMap.put("保证金价", 110);
		paramMap.put("合并折让率", 0);//折让+返货/(1+返货）
		paramMap.put("备案_协调费", 0);
		paramMap.put("备案_商业费",0);
		paramMap.put("折算后规模返利", 0);
		paramMap.put("销项税率", 0.1);
		paramMap.put("附加税", 0.12);
		paramMap.put("备案_营销费用_奖金提成", 0.015);
		paramMap.put("营销费用_运费仓储", 0.020);
		paramMap.put("备案_营销费用_员工", 0.015);
		paramMap.put("备案_管理费用", 0.015);
		paramMap.put("备案_项目费用", 0.020);
		
		paramMap.put("开票金额_管理", "110");
		paramMap.put("采购成本", "80" ); //不含税采购金额
		
		List<String> expression= new ArrayList<String>();
				
		expression.add("营业收入_管理  = 开票金额_管理  / (1 + 销项税率); " );
		
		expression.add("应记折让_不含税 = 营业收入_管理 * 合并折让率; ");
		
		expression.add("应记折让_含税 = 开票金额_管理  * 合并折让率; ");
				
		expression.add("折后开票金额_管理 = 开票金额_管理 - 应记折让_含税; ");
		
		expression.add("协调费 = 折后开票金额_管理 * 备案_协调费; ");
		
		expression.add("商业费 = 折后开票金额_管理 * 备案_商业费; ");
		
		expression.add("高开税金 = (开票金额_管理 - 保证金价)/(1 + 销项税率)* 销项税率* (1 + 附加税); ");
		
		expression.add("总保证金 = 保证金价 + 高开税金; ");
		
		expression.add("保证金商业费 = 开票金额_管理 - 应记折让_含税 - 总保证金; ");
		
		expression.add("合并商业费 = 商业费 + 保证金商业费; ");
		
		expression.add("规模返利 = 折后开票金额_管理 * 折算后规模返利; ");
		
		expression.add("政策费用合计 = 应记折让_不含税 * 1.0 + 协调费 * 1.0 + 规模返利 * 1.0; ");
		
		expression.add("运费  = 营业收入_管理 * 营销费用_运费仓储; ");
		
		expression.add("营销费用_奖金提成 = (折后开票金额_管理 - 合并商业费 - 规模返利) * 备案_营销费用_奖金提成; ");
		
		expression.add("直接费用 = 政策费用合计 + 运费 + 营销费用_奖金提成; ");
		
		expression.add("毛利 = 营业收入_管理 - 采购成本; ");
		
		expression.add("边际利润 = 毛利 - 直接费用; ");
		
		expression.add("营销费用_员工 = 营业收入_管理 * 备案_营销费用_员工; ");
		
		expression.add("管理费用 = 营业收入_管理 * 备案_管理费用; ");
		
		expression.add("项目费用 = 营业收入_管理 * 备案_项目费用; ");
		
		expression.add("销售利润 = 边际利润 - 营销费用_员工 - 管理费用 - 项目费用; ");
		
		expression.add("税金及附加 = 毛利 * 销项税率 * (1 + 附加税); ");
		
		expression.add("利润率 = (销售利润 - 税金及附加)/ 营业收入_管理; ");
		
		Object obj = MVEL.eval(expression.stream().collect(Collectors.joining("\n")),paramMap);
		System.out.println(obj);
	}
}
